class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 
     * @param coins int整型vector 
     * @return int整型
     */
    int dp[110][110]={0};//dp[i][j]表示[i,j]范围最大积分
    int getCoins(vector<int>& coins) {
        // write code here
        //范围dp
        int n=coins.size();
        vector<int> v(n+2);
        v[0]=v[n+1]=1;
        for(int i=1;i<=n;i++)
        {
            v[i]=coins[i-1];
        }
        for(int j=1;j<=n;j++)
        {
            for(int i=j;i>=1;i--)
            {
                for(int k=j;k>=i;k--)//每个数作为最后一个数，选结果最大的
                {
                    dp[i][j]=max(dp[i][j],dp[i][k-1]+dp[k+1][j]+v[k]*v[i-1]*v[j+1]);
                }
                //cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
            }
        }
        return dp[1][n];

    
    }
};